// /utils/formatters.js
import { padZero } from 'time.js';
/**
 * [格式化工具] - 格式化预约时间段，用于UI显示
 * @param {string} start - 开始时间字符串, e.g., "2025-09-10 09:00"
 * @param {string} end - 结束时间字符串, e.g., "2025-09-10 10:30"
 * @returns {string} - 格式化后的时间, e.g., "9月10日 09:00 - 10:30"
 */
const formatDisplayTime = (start, end) => {
  // 使用try...catch确保即使时间格式异常，程序也不会崩溃
  try {
    // new Date() 在 iOS 系统上对 'YYYY-MM-DD' 格式的兼容性不佳，替换为 'YYYY/MM/DD'
    const startDate = new Date(start.replace(/-/g, '/'));
    const month = startDate.getMonth() + 1;
    const day = startDate.getDate();
    // 使用 substring 精确截取 HH:mm 部分
    const startTime = start.substring(11, 16);
    const endTime = end.substring(11, 16);
    return `${month}月${day}日 ${startTime} - ${endTime}`;
  } catch (e) {
    console.error("时间格式化失败", e);
    return '时间信息有误';
  }
};
/**
 * [格式化工具] - 将 ISO 格式的日期时间字符串，格式化为 "M月D日 HH:mm"
 */
const formatDateTime = (isoString) => {
  if (!isoString) return '';
  // 兼容 iOS，将 'T' 和 '-' 替换
  const date = new Date(isoString.replace('T', ' ').replace(/-/g, '/'));
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hour = date.getHours();
  const minute = date.getMinutes();
  return month + '月' + day + '日 ' + padZero(hour) + ':' + padZero(minute);
};

/**
 * [格式化工具] - 从 ISO 字符串中提取出 "HH:mm"
 */
const getEndTime = (isoString) => {
  if (!isoString) return '';
  return isoString.substring(11, 16);
};

/**
 * [格式化工具] - 格式化为 "YYYY-MM-DD HH:mm"
 */
const formatFullDateTime = (isoString) => {
  if (!isoString) return '时间信息错误';
  const dt = new Date(isoString.replace('T', ' ').replace(/-/g, '/'));
  const year = dt.getFullYear();
  const month = padZero(dt.getMonth() + 1);
  const day = padZero(dt.getDate());
  const hour = padZero(dt.getHours());
  const minute = padZero(dt.getMinutes());
  return `${year}-${month}-${day} ${hour}:${minute}`;
};
/**
 * [格式化工具] - 将总分钟数格式化为 "X时X分"
 */
const formatDurationInHoursAndMinutes = (totalMinutes) => {
  if (totalMinutes === null || totalMinutes === undefined || totalMinutes < 0) return '时长未知';
  if (totalMinutes === 0) return '0分钟';
  const hours = Math.floor(totalMinutes / 60);
  const minutes = totalMinutes % 60;
  let result = '';
  if (hours > 0) result += `${hours}时`;
  if (minutes > 0) result += `${minutes}分钟`;
  return result;
};

/**
 * [导出] 用于格式化一个时间段，例如 "9月5日 10:00 - 11:30"
 */
const formatRange = (start, end) => {
  if (!start || !end) return '时间信息错误';
  return formatDateTime(start) + ' - ' + getEndTime(end);
};

/**
 * [导出] 用于格式化单个时间点，例如 "9月5日 10:00"
 */
const formatSingle = (start) => {
  if (!start) return '时间信息错误';
  return formatDateTime(start);
};

/**
 * [字符串工具] - 对手机号中间四位进行脱敏处理
 * @param {string} phone - 11位手机号字符串
 * @returns {string} - 脱敏后的字符串，e.g., "138****1234"
 */
const maskPhone = (phone) => {
  if (!phone || String(phone).length !== 11) return phone; // 如果格式不符，返回原值
  return String(phone).substring(0, 3) + '****' + String(phone).substring(7);
};

// 使用 ES Module 导出函数，以便其他文件可以导入使用
export {
  formatDisplayTime,
  formatRange,
  formatFullDateTime,
  formatDurationInHoursAndMinutes,
  formatSingle,
  formatDateTime,
  maskPhone
};